home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_actor_floateraet.cog < prev    next >
Text File  |  1999-11-15  |  6KB  |  246 lines

  1. # Jones 3D Cog Script
  2. #
  3. # actor_FloaterAET.cog
  4. #
  5. # Allows the Aetherium floater to do his thang...
  6. #
  7. # [PKM]
  8. #
  9. # [RT] 5/10/99: Added light ball...
  10. # [MDR] 8/13/99: Changed stuff... muwah ha ha
  11. #
  12. # (C) 1999 LucasArts Entertainment Co. All Rights Reserved
  13. # ========================================================================================
  14.  
  15. symbols
  16.  
  17.     message        startup
  18.     message        created
  19.     message        aievent
  20.     message        damaged
  21.     message        killed
  22.     message        callback
  23.     message        pulse
  24.     message        statechange
  25.  
  26. # ************************** TEMPLATES *************************
  27.     template    blast=+ExpFloaterSpr        local        # MDR: Used by explosion -- don't remove!
  28.  
  29. # *********************** MISC LOCAL VARS **********************
  30.     thing        t_sender                    local
  31.  
  32.     int            eventType                    local
  33.     int            n_userData                    local
  34.     int            projectile                    local
  35.  
  36.     flex        f_minCommitDist                local
  37.     flex        f_alphaRest                    local
  38.     flex        f_alphaCrnt                    local
  39.  
  40.     int            FLAG_SETARMEDMODE            local
  41.     int            FLAG_FIRE                    local
  42.  
  43. end
  44.  
  45. # ========================================================================================
  46. code
  47.  
  48. # ........................................................................................
  49. startup:
  50.  
  51.     FLAG_SETARMEDMODE    = 0x100;
  52.     FLAG_FIRE            = 0x200;
  53.     
  54.     f_alphaRest            = 0.20;
  55.     f_minCommitDist        = 0.90;
  56.  
  57.     return;
  58.  
  59.  
  60. # ........................................................................................
  61. created:
  62.  
  63.     t_sender = GetSenderRef();
  64.  
  65.     SetActorFlags(t_sender, 0x100000);                    # Set AF_NOTARGET
  66.     AISetMode(t_sender, 0x10000);                        # Set MODE_WANTALLEVENTS
  67.     AISetMode(t_sender, 0x2000000);                        # Set MODE_NOCHASING
  68.  
  69.     SetArmedMode(t_sender, 7);                            # Switch to non-active armed mode
  70.  
  71.     SetThingUserData(t_sender, 0);
  72.     SetThingLight(t_sender, '0.1 0.4 0.45', 0.5, 0.9);
  73.     SetThingAlpha(t_sender, f_alphaRest);
  74.  
  75.     SetThingPulse(t_sender, 1.0);
  76.  
  77.     return;
  78.  
  79.  
  80. # ........................................................................................
  81. aievent:
  82.  
  83.     t_sender    = GetSenderRef();
  84.     n_userData    = GetThingUserData(t_sender);
  85.     eventType    = GetParam(0);
  86.  
  87.     if ( BITTEST(n_userData, FLAG_SETARMEDMODE) )        # If a armed mode change pending, bail
  88.         return;
  89.  
  90.     if ( eventType == 0x40 )                            #---- EVENT_MOVETARGETCHANGED
  91.     {
  92.         if ( AIGetArmedMode(t_sender) == 7 )                # Non-active armed mode?
  93.         {
  94.             if ( !BITTEST(AIGetMode(t_sender), 0x202) )
  95.                 return;
  96.  
  97.             PlaySoundClass(t_sender, 1);                    # (Re)start 'looping' sound
  98.             PlayMode(t_sender, 69, 0);                        # Play the stand to walk anim
  99.             SetThingStateChange(t_sender, 0, 0);            # Set a statechange to active armed mode
  100.  
  101.             n_userData = BITSET(n_userData, FLAG_SETARMEDMODE);
  102.         }
  103.     }
  104.  
  105.     if ( eventType == 0x800 )                            #---- EVENT_GOALREACHED
  106.     {
  107.         if ( AIGetArmedMode(t_sender) == 0 )                    # Active armed mode?
  108.         {
  109.             if ( !BITTEST(AIGetMode(t_sender), 0x202) )
  110.             {
  111.                 n_userData = BITSET(n_userData, FLAG_SETARMEDMODE);
  112.                 SetThingUserData(t_sender, n_userData);
  113.  
  114.                 StopThing(t_sender);
  115.                 ResetThing(t_sender);
  116.                 SetArmedMode(t_sender, 7);                        # Switch to non-active armed mode
  117.                 PlayMode(t_sender, 70, 0);                        # Play the walk to stand anim
  118.  
  119.                 n_userData = BITCLEAR(n_userData, FLAG_SETARMEDMODE);
  120.             }
  121.         }
  122.     }
  123.  
  124.     if ( eventType == 0x4000 )                            #---- EVENT_FIRE
  125.     {
  126.         if ( GetThingAlpha(t_sender) == 1.0 )
  127.         {
  128.             n_userData = BITSET(n_userData, FLAG_FIRE);            # Set "shot pending" flag
  129.         }
  130.     }
  131.  
  132.     SetThingUserData(t_sender, n_userData);                    # Record flag settings
  133.  
  134.     return;
  135.  
  136.  
  137. # ........................................................................................
  138. pulse:
  139.  
  140.     t_sender = GetSenderRef();
  141.  
  142.     if (VectorX(GetThingLight(t_sender)) > 0.1)
  143.     {
  144.         SetThingLight(t_sender, '0.1 0.4 0.45', 0.5, 0.9);
  145.     }
  146.     else
  147.     {
  148.         SetThingLight(t_sender, '0.3 0.6 0.65', 0.5, 0.9);
  149.     }
  150.  
  151.     f_alphaCrnt = GetThingAlpha(t_sender);
  152.     if ( (f_alphaCrnt == f_alphaRest) || (f_alphaCrnt == 1.0) )
  153.     {
  154.         if ( VectorDist(GetThingPos(t_sender), GetThingPos(GetLocalPlayerThing())) > f_minCommitDist )
  155.         {
  156.             if ( f_alphaCrnt > f_alphaRest )
  157.             {
  158.                 ThingFadeAnim(t_sender, f_alphaCrnt, f_alphaRest, 2, 0);        # Fade back out over 2 sec
  159.                 SetActorFlags(t_sender, 0x100000);                                # Set AF_NOTARGET
  160.             }
  161.         }
  162.         else
  163.         {
  164.             if ( f_alphaCrnt < 1.0 )
  165.             {
  166.                 ThingFadeAnim(t_sender, f_alphaCrnt, 1.0, 2, 0);                # Fade in over 2 sec
  167.                 ClearActorFlags(t_sender, 0x100000);                            # Clear AF_NOTARGET
  168.             }
  169.         }
  170.     }
  171.  
  172.     return;
  173.  
  174.  
  175. # ........................................................................................
  176. damaged:
  177.  
  178.     # Floater always takes SITH_DAMAGE_CRUSH
  179.     if ( GetParam(1) == 0x80 )
  180.     {
  181.         return;
  182.     }
  183.  
  184.     if ( GetThingAlpha(GetSenderRef()) < 1.0 )
  185.     {
  186.         ReturnEx(0);
  187.     }
  188.  
  189.     return;
  190.  
  191.  
  192. # ........................................................................................
  193. killed:
  194.  
  195.     SetThingPulse(GetSenderRef(), 0.0);
  196.     ClearThingFlags(GetSenderRef(), 0x1);
  197.  
  198.     return;
  199.  
  200.  
  201. # ........................................................................................
  202. statechange:
  203.  
  204.     t_sender    = GetSenderRef();
  205.     n_userData    = GetThingUserData(t_sender);
  206.  
  207.     if ( GetParam(0) == 0 )
  208.     {
  209.         if ( GetParam(1) == 0 )
  210.         {
  211. #            DEBUGPRINT("Switch to armed mode 0");
  212.             PlayMode(t_sender, 1, 0);                            # Play 'stand' anim
  213.  
  214.             n_userData = BITCLEAR(n_userData, FLAG_SETARMEDMODE);
  215.         }
  216.     }
  217.  
  218.     SetThingUserData(t_sender, n_userData);                        # Record flag settings
  219.  
  220.     return;
  221.  
  222.  
  223. # ........................................................................................
  224. callback:
  225.  
  226.     t_sender    = GetSenderRef();
  227.     n_userData    = GetThingUserData(t_sender);
  228.  
  229.     if ( BITTEST(n_userData, FLAG_FIRE) )
  230.     {
  231.         projectile = GetActorWeapon(t_sender);
  232.  
  233.         FireProjectile(t_sender, projectile, -1, -1, '0 0 0', '0 0 0', 1.0, 0, 0, 0);
  234.         n_userData = BITCLEAR(n_userData, FLAG_FIRE);                # Clear "shot pending" flag
  235.     }
  236.  
  237.     SetThingUserData(t_sender, n_userData);                        # Record flag settings
  238.  
  239.     return;
  240.  
  241. # ........................................................................................
  242.  
  243. end
  244.  
  245.  
  246.